package dominio;


public class Juego{

	private static final Integer CANTIDAD_FANTASMAS = 4;
	
	private Laberinto laberinto;
	private Pacman pacman;
	private Fantasma[] fantasmas;
	
	private static Juego singleton;
	
	private Juego() {
	}
	
	public void inicializarPartida() {
		if (this.laberinto == null) {
			return;
		}		
		pacman = new Pacman();
		fantasmas = new Fantasma[CANTIDAD_FANTASMAS];
		fantasmas[0] = new Fantasma(pacman, new Buscador());
		fantasmas[1] = new Fantasma(pacman, new BuscadorTemperamental());
		fantasmas[1].getEstadoActual().setAgresividad(3);
		fantasmas[2] = new Fantasma(pacman, new Zonzo());
		fantasmas[3] = new Fantasma(pacman, new Perezoso());
	}	
		
	public static Juego getInstance() {
		if (singleton == null) {
			singleton = new Juego();
		}
		return singleton;
	}

	public Laberinto getLaberinto() {
		return laberinto;
	}

	public void setLaberinto(Laberinto laberinto) {
		this.laberinto = laberinto;
	}

	public Pacman getPacman() {
		return pacman;
	}

	public void setPacman(Pacman pacman) {
		this.pacman = pacman;
	}

	public Fantasma[] getFantasmas() {
		return fantasmas;
	}

	public void setFantasmas(Fantasma[] fantasmas) {
		this.fantasmas = fantasmas;
	}
	
	public void nuevoTick(Sentido direccionDelPacman) {
		pacman.mover(direccionDelPacman);
		for (Fantasma fantasma : fantasmas) {
			fantasma.colisionar();
			if (terminoPartida()) {
				return;
			}
			fantasma.mover();
			fantasma.colisionar();
			fantasma.siguienteEstado();
		}
	}
	
	public Boolean terminoPartida() {
		return (laberinto.terminoPartida() || pacman.getMuerto());
	}
}
